perm filename PGSAI.SAI[VIS,HPM]1 blob
sn#421714 filedate 1979-02-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 entry PTEXT,PTXTTR,PRECTA,PELLIP
C00005 00003 INTERNAL PROCEDURE PRECTA(REAL X1,Y1,X2,Y2)
C00006 ENDMK
C⊗;
entry PTEXT,PTXTTR,PRECTA,PELLIP;
BEGIN "PGSAI"
EXTERNAL PROCEDURE PLINE(REAL X1,Y1,X2,Y2);
EXTERNAL PROCEDURE PPOLYG(INTEGER N; REFERENCE REAL X,Y);
OWN REAL PXLO,PYLO,PXLIM,PYLIM,PXS,PYS,PDXS,PDYS;
INTERNAL PROCEDURE PTXTTR(REAL XPOS,YPOS,XSZ,YSZ,DXSZ(0.0),DYSZ(0.0));
BEGIN
PXLIM←XPOS; PXLO←XPOS; PXS←XSZ; PDXS←DXSZ;
PYLIM←YPOS; PYLO←YPOS; PYS←YSZ; PDYS←DYSZ;
END;
INTERNAL PROCEDURE PTEXT(STRING TXT);
BEGIN
EXTERNAL INTEGER LETAB;
INTEGER I,J,IL,JL,LETT,PNT;
WHILE LENGTH(TXT)>0 DO
BEGIN
LETT←LOP(TXT);
IF LETT='15 THEN BEGIN PXLO←PXLIM; PYLO←PYLIM; END ELSE
IF LETT='12 THEN BEGIN PXLO←PXLO-PDXS; PYLO←PYLO-PYS; END ELSE
IF LETT='11 THEN BEGIN PXLO←PXLO+4*PXS; PYLO←PYLO+4*PDYS; END ELSE
IF LETT='177 THEN BEGIN PXLO←PXLO-PXS; PYLO←PYLO-PDYS; END ELSE
IF LETT=0 THEN ELSE
BEGIN
PNT←POINT(3,MEMORY[LOCATION(LETAB)+3*LETT],-1);
J←ILDB(PNT); I←ILDB(PNT);
WHILE ¬(J=7 ∧ I=7) DO
BEGIN
IL←I; JL←J;
J←ILDB(PNT); I←ILDB(PNT);
IF J≠7 THEN
BEGIN
IF IL=7 THEN IL←-3; IF I=7 THEN I←-3;
PLINE(PXLO+(JL/6)*PXS+((IL+1)/10)*PDXS,PYLO+((IL+1)/10)*PYS+(JL/6)*PDYS,
PXLO+(J/6)*PXS+((I+1)/10)*PDXS,PYLO+((I+1)/10)*PYS+(J/6)*PDYS);
END
ELSE IF I=0 THEN BEGIN J←ILDB(PNT); I←ILDB(PNT); END;
END;
PXLO←PXLO+PXS;
PYLO←PYLO+PDYS;
END;
END;
END;
INTERNAL PROCEDURE PRECTA(REAL X1,Y1,X2,Y2);
BEGIN
REAL ARRAY X,Y[1:4];
X[1]←X1; Y[1]←Y1;
X[2]←X1; Y[2]←Y2;
X[3]←X2; Y[3]←Y2;
X[4]←X2; Y[4]←Y1;
PPOLYG(4,X[1],Y[1]);
END;
INTERNAL PROCEDURE PELLIP(REAL X1,Y1,X2,Y2);
BEGIN
REAL ARRAY X,Y[1:64];
REAL CX,CY,RX,RY;
INTEGER I;
CX←(X1+X2)/2; CY←(Y1+Y2)/2; RX←(X2-X1)/2; RY←(Y2-Y1)/2;
FOR I←1 STEP 1 UNTIL 64 DO
BEGIN
X[I]←CX+RX*COS(2*3.1415926*I/64);
Y[I]←CY+RY*SIN(2*3.1415926*I/64);
END;
PPOLYG(64,X[1],Y[1]);
END;
END;